Use case: DMA channel linear linked-list mode transfer in interrupt mode ¶
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
HAL_DMAEx_List_BuildNode(&NodeConf, &Node1);
HAL_DMAEx_List_InsertNode(&Queue2, NULL, &Node1);
HAL_DMAEx_List_Init(&LL_HandleDMA1);
HAL_DMAEx_List_LinkQ(&LL_HandleDMA1, &Queue2);
HAL_DMAEx_List_Start_IT(&LL_HandleDMA1)
|
HAL_DMA_FillNodeConfig(Node1, NodeConf, HAL_DMA_NODE_2D_ADDRESSING);
HAL_Q_Init(Queue2, &HAL_DMA_2DAddressing_DescOps);
HAL_Q_InsertNode(Queue2, NULL, Node1);
HAL_DMA_Init(LL_DMA_Handle1, HAL_GPDMA1_CH12);
HAL_DMA_SetConfigLinkedListXfer(LL_DMA_Handle1, LL_xfer_config1);
HAL_DMA_StartLinkedListXfer_IT(LL_DMA_Handle1, Queue2);
|
Key changes ¶
HAL2 supports interrupt-driven linked-list transfers through
HAL_DMA_StartLinkedListXfer_IT().HAL2 uses a queue-based approach for building and inserting nodes.
The DMA interrupt handler remains
HAL_DMA_IRQHandler().

